package java.lang;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Object {
    private void mySelfMethod() {
        System.out.println("测试该java.lang.Object，能否被加载");
    }

    // 如果再定义一个其他类，则永远访问的不是我们自己定义的java.lang.Object，而是系统类java.lang.Object
    // 直接在自定义java.lang.Object下面创建main方法会报找不到main方法错误，因为加载的Object是系统类lib下面的
    // 总结：java.lang.Object属于系统类，交由启动类加载器加载；如果自定义类加载器，破坏双亲委派loadClass，也是load的系统的java.lang.Object
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Object obj = new Object();
        // 编译报错
//        obj.mySelfMethod();
        // 反射获取
        Class<?> objClz = Class.forName("java.lang.Object");
        Object objOne = objClz.newInstance();
        Method mySelfMethod = objClz.getMethod("mySelfMethod");
        // java.lang.NoSuchMethodException: java.lang.Object.mySelfMethod()
        mySelfMethod.invoke(objOne);
    }
}
